﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Windows.Forms;
using iBankCliente.Logica;

namespace iBankCliente.Cliente
{
    public class Cliente   
    {
        public static List<Cuenta> obtenerListaCuentas(String tarjeta)
        {
            List<Cuenta> listaCuenta = new List<Cuenta>();
            //Cuenta cuenta = new Cuenta();
            String index= send("N" + tarjeta + ".........." + "..........");
            index = index.Substring(21, index.Length-21);
            for (int i = 0; i < int.Parse(index); i++)
            {
                Cuenta cuenta = new Cuenta();
                String protocolo = send("C" + tarjeta + ".........." + Convert.ToString(i));
                String numeroCuenta = protocolo.Substring(21, 10);
                String monto = protocolo.Substring(31, protocolo.Length - 31);
                cuenta.Saldo = long.Parse(monto);
                cuenta.Numero = numeroCuenta;
                listaCuenta.Add(cuenta);
                Console.WriteLine("CLIENTE CUENTA NUMERO : "+numeroCuenta +" "+monto);
                
            }
            
            return listaCuenta;
        }

        public static String cambioClave(String nuevaClave, String tarjeta)
        {
            nuevaClave = completarClave(nuevaClave);
            String mensaje = send("M" + tarjeta + nuevaClave + "..........");
            return mensaje.Substring(0,1);
        }

        public static String login(String tarjeta, String clave, Label label)
        {
            clave = completarClave(clave);
            String mensaje = send("L" + tarjeta + clave + "..........");
         //   Console.WriteLine("mensaje del servidor  = " + mensaje);
            String confirmacion = mensaje.Substring(0, 1);
            String error;
            try
            {
                 error = mensaje.Substring(1, 20);
                 label.Text = error;
            }
            catch
            {
                error = "";
            }
            return confirmacion;

        }

        private static string completarClave(string clave)
        {
            if (clave.Length < 10)
            {
                for (int i = clave.Length; i < 10; i++)
                {
                    clave = clave + "#";
                }
            }          
            return clave;
        }

        public static string mensajeDeposito(String tarjeta, String cuenta, String monto)
        {
            String mensaje = send("D" + tarjeta + ".........." + cuenta  + monto);
            return mensaje.Substring(0, 1);
        }

        public static string mensajeRetiro(String tarjeta, String cuenta, String monto)
        {
            String mensaje = send("R" + tarjeta + ".........." + cuenta + monto);
            return mensaje.Substring(0, 1);
        }

        private static String send(String mensajeEnviar)
        {
            String mensajeRecibido = "";
            TcpClient socketForServidor;

            socketForServidor = new TcpClient("localhost", 9898);
            Console.WriteLine("Cliente dice: " + mensajeEnviar);

            NetworkStream networksStream = socketForServidor.GetStream();

            StreamReader streamReader = new System.IO.StreamReader(networksStream);
            StreamWriter streamWriter = new StreamWriter(networksStream);

            try
            {
                streamWriter.WriteLine(mensajeEnviar);
                streamWriter.Flush();

                mensajeRecibido = streamReader.ReadLine();
                Console.WriteLine(mensajeRecibido);

            }
            catch
            {
                Console.WriteLine("Exception reading from Server");
            }
            finally
            {
                streamWriter.Close();
                networksStream.Close();
            }
            return mensajeRecibido;

        }

        
    }
}
